<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>canvas基础</title>
    <style>
        /* 
            1.绘制矩形
                fillRect(x, y, width, height)
                绘制一个填充的矩形
                strokeRect(x, y, width, height)
                绘制一个矩形的边框
                clearRect(x, y, width, height)
                清除指定矩形区域，让清除部分完全透明。
            2.绘制路径
                1.首先，你需要创建路径起始点。
                2.然后你使用画图命令去画出路径。
                3.之后你把路径封闭。
                4.一旦路径生成，你就能通过描边或填充路径区域来渲染图形。

                                beginPath()
                                新建一条路径，生成之后，图形绘制命令被指向到路径上生成路径。
                                closePath()
                                闭合路径之后图形绘制命令又重新指向到上下文中。
                                stroke()
                                通过线条来绘制图形轮廓。
                                fill()
                                通过填充路径的内容区域生成实心的图形。


         */
    </style>
</head>

<body>
    <canvas id="canvas" width="500" height="500" style="background-color: yellow;"></canvas>




    <script>
        function clock() {
            var now = new Date();
            var ctx = document.getElementById('canvas').getContext('2d');
            ctx.save();
            ctx.clearRect(0, 0, 150, 150);
            ctx.translate(75, 75);
            ctx.scale(0.4, 0.4);
            ctx.rotate(-Math.PI / 2);
            ctx.strokeStyle = "black";
            ctx.fillStyle = "white";
            ctx.lineWidth = 8;
            ctx.lineCap = "round";

            // Hour marks
            ctx.save();
            for (var i = 0; i < 12; i++) {
                ctx.beginPath();
                ctx.rotate(Math.PI / 6);
                ctx.moveTo(100, 0);
                ctx.lineTo(120, 0);
                ctx.stroke();
            }
            ctx.restore();

            // Minute marks
            ctx.save();
            ctx.lineWidth = 5;
            for (i = 0; i < 60; i++) {
                if (i % 5 != 0) {
                    ctx.beginPath();
                    ctx.moveTo(117, 0);
                    ctx.lineTo(120, 0);
                    ctx.stroke();
                }
                ctx.rotate(Math.PI / 30);
            }
            ctx.restore();

            var sec = now.getSeconds();
            var min = now.getMinutes();
            var hr = now.getHours();
            hr = hr >= 12 ? hr - 12 : hr;

            ctx.fillStyle = "black";

            // write Hours
            ctx.save();
            ctx.rotate(hr * (Math.PI / 6) + (Math.PI / 360) * min + (Math.PI / 21600) * sec)
            ctx.lineWidth = 14;
            ctx.beginPath();
            ctx.moveTo(-20, 0);
            ctx.lineTo(80, 0);
            ctx.stroke();
            ctx.restore();

            // write Minutes
            ctx.save();
            ctx.rotate((Math.PI / 30) * min + (Math.PI / 1800) * sec)
            ctx.lineWidth = 10;
            ctx.beginPath();
            ctx.moveTo(-28, 0);
            ctx.lineTo(112, 0);
            ctx.stroke();
            ctx.restore();

            // Write seconds
            ctx.save();
            ctx.rotate(sec * Math.PI / 30);
            ctx.strokeStyle = "#D40000";
            ctx.fillStyle = "#D40000";
            ctx.lineWidth = 6;
            ctx.beginPath();
            ctx.moveTo(-30, 0);
            ctx.lineTo(83, 0);
            ctx.stroke();
            ctx.beginPath();
            ctx.arc(0, 0, 10, 0, Math.PI * 2, true);
            ctx.fill();
            ctx.beginPath();
            ctx.arc(95, 0, 10, 0, Math.PI * 2, true);
            ctx.stroke();
            ctx.fillStyle = "rgba(0,0,0,0)";
            ctx.arc(0, 0, 3, 0, Math.PI * 2, true);
            ctx.fill();
            ctx.restore();

            ctx.beginPath();
            ctx.lineWidth = 14;
            ctx.strokeStyle = '#325FA2';
            ctx.arc(0, 0, 142, 0, Math.PI * 2, true);
            ctx.stroke();

            ctx.restore();

            window.requestAnimationFrame(clock);
        }

        window.requestAnimationFrame(clock);









        // const canvas = document.getElementById('canvas');
        // let ctx = canvas.getContext('2d');
        // ctx.beginPath();
        // ctx.moveTo(10,10);
        // ctx.lineTo(110,10);
        // ctx.lineTo(55,60);
        // ctx.closePath()
        // ctx.fill()




        // ctx.fillStyle = "rgb(200,0,0)";
        // ctx.fillRect(10, 10, 55, 50);

        // ctx.fillStyle = "rgba(0, 0, 200, 0.5)";
        // ctx.fillRect(30, 30, 55, 50);

    </script>
</body>

</html>